package shthon2011s.decome;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;

public class EditPhoto extends Activity {
    
    private HashMap<Integer, MotionSetting> mSetting = new HashMap<Integer, MotionSetting>();
    private static final HashMap<Integer, String> MOTION_NAMES = new HashMap<Integer, String>();
    
    static {
        MOTION_NAMES.put(R.id.item1, "item1");
        MOTION_NAMES.put(R.id.item2, "item2");
        MOTION_NAMES.put(R.id.item3, "item3");
        MOTION_NAMES.put(R.id.item4, "item4");
        MOTION_NAMES.put(R.id.item5, "item5");
        MOTION_NAMES.put(R.id.item6, "item6");
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_photo);
        // TODO: getIntent.getData()からUriを取得して、画像を表示
        // ギャラリーからだと、content://〜
        // エスクプローラーからだと、file://〜
        // どっちにも対応するべき？サンプルだからギャラリーだけでもいいかも。
        Uri uri = getIntent().getData();
        try {
            Bitmap bitmap = Media.getBitmap(getContentResolver(), uri);
        } catch (FileNotFoundException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.edit_photo, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_share:
                // TODO: 共有
                return true;
                
            case R.id.menu_play:
                // TODO: 再生する
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    /**
     * 各モーションの再生秒数、繰り返しなど設定
     * @param v
     */
    public void setMotionSetting(View v) {
        final int id = v.getId();
        final ImageView button = (ImageView) v;
        int i = 0;
        switch (id) {
            case R.id.anim1: i = 0; break;
            case R.id.anim2: i = 1; break;
            case R.id.anim3: i = 2; break;
        }
        final int position = i;
        MotionSetting setting = mSetting.get(position);
        if (setting == null) {
            Toast.makeText(this, R.string.please_select_item, Toast.LENGTH_SHORT).show();
        } else {
            final View view = getLayoutInflater().inflate(R.layout.dialog_motion, null);
            final EditText editSeconds = (EditText) view.findViewById(R.id.seconds);
            editSeconds.setText(String.valueOf(setting.playSeconds));
            final CheckBox chkRepeat = (CheckBox) view.findViewById(R.id.repeat);
            chkRepeat.setChecked(setting.repeat);
            new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_info)
                .setTitle(R.string.title_motion_setting)
                .setView(view)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    
                    public void onClick(DialogInterface dialog, int which) {
                        // OKボタン
                        final int seconds = Integer.valueOf(editSeconds.getText().toString());
                        final boolean repeat = chkRepeat.isChecked();
                        // 状態を保存する
                        MotionSetting setting;
                        setting = mSetting.get(position);
                        setting.playSeconds = seconds;
                        setting.repeat = repeat;
                        // 設定を再保存
                        mSetting.put(position, setting);
                    }
                })
                .setNeutralButton(R.string.delete, new DialogInterface.OnClickListener() {
                    
                    public void onClick(DialogInterface dialog, int which) {
                        // 削除ボタン
                        switch (id) {
                            case R.id.anim1: mSetting.remove(0); break;
                            case R.id.anim2: mSetting.remove(1); break;
                            case R.id.anim3: mSetting.remove(2); break;
                        }
                        button.setImageResource(R.drawable.noselected);
                        button.setAdjustViewBounds(true);
                        dialog.dismiss();
                    }
                })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    
                    public void onClick(DialogInterface dialog, int which) {
                        // キャンセルボタン
                        dialog.dismiss();
                    }
                })
               .create()
               .show();
        }
    }
    
    /**
     * モーションアイテムを設定する
     * @param v
     */
    public void setMotionEvent(View v) {
        String motionName = MOTION_NAMES.get(v.getId());
        ImageView button = (ImageView) v;
        Drawable drawable = button.getDrawable();
        // TODO: 既に3つ埋まってるかチェック
        for (int i = 0; i < 3; i++) {
            if (!mSetting.containsKey(i)) {
                mSetting.put(i, new MotionSetting(motionName, 0, false));
                ImageView target = null;
                switch (i) {
                    case 0:
                        target = (ImageView)findViewById(R.id.anim1);
                        break;
                        
                    case 1:
                        target = (ImageView)findViewById(R.id.anim2);
                        break;
                        
                    case 2:
                        target = (ImageView)findViewById(R.id.anim3);
                        break;
                }
                target.setImageDrawable(drawable);
                target.setAdjustViewBounds(true);
                break;
            }
        }
    }
}
